package com.cskaoyan.javase.oop2._2polymorphic._2advantage.parameter;

/**
 * 思考:
 * 方法的实参数据类型需要和方法的形参数据类型保持一致吗?
 * 是不需要
 * 比如基本数据类型实参如果能够自动类型转换到形参数据类型,那么也是允许的
 * 以上说的是基本数据类型,引用数据类型一样可以
 * 如果引用数据类型实参可以能够向上转型为形参的数据类型,那么也是允许的.
 * 具体来说,如果形参是父类类型,那么实参可以是父类类型对象,也可以是子类对象
 *
 * 引申扩展
 * 上述引用数据类型是作为实参,那么作为返回值时,也存在这种现象吗?
 * 存在的
 * 具体来说,如果返回值类型是父类类型,那么具体的返回值对象可以是父类类型对象,也可以是子类对象
 *
 * @since 14:47
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test(100L);
        test(new Father());
        test(new Son());
        test(new SecondSon());
    }

    public static Father test(){
        // return new Father();
        // return new Son();
        return new SecondSon();
    }

    public static void test(double a) {
    }

    public static void test(Father f) {
    }
}

class Father {
}

class Son extends Father {
}

class SecondSon extends Father {
}